<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    //实例方法
    //通过类的实例对象调用方法

    class Person{
        say(){
            console.log('hello')
        }
    }

    const p = new Person()
    p.say()

    //实例属性
    //实例属性指的是类的实例对象可调用的属性

    class Persons{
        //实例属性
        constructor(name,age){
            this.name = name
            this.age = age
        }

        getName(){
            console.log(this.name)
        }
    }

    //实例对象
    const p1 = new Persons('小明',18)
    p1.getName() //小明
    console.log(p1.name) //小明
    console.log(p1.age) //18


    //静态方法
    // 类相当于实例的原型，所有在类中定义的方法，都会被实例继承。如果在一个方法前，
    //加上static关键字，就表示该方法不会被实例继承，而是直接通过类来调用，这就称为“静态方法”

    class Personss{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }

        //静态方法
        static say(){
            console.log('hello')
        }
    }

    Personss.say() 

    //温馨提示
    // 注意，如果静态方法包含this关键字，这个this指的是类，而不是实例。
    class thiss{
        static pays(){
            this.pay()
        }
        static pay(){
            console.log(1)
        }
        pay(){
            console.log(2)
        }
    }
    thiss.pays() //静态方法调用 pays() 的this 指向的是类 等同于 thiss.pay() 也是静态方法调用所以输出1

    //静态属性指的是Class本身的属性，即Class.propName，而不是定义在实例对象（this）上的属性。
    Personss.age = 50
    console.log(Personss.age)
</script>